home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr47 / wasm223.zip / BUFFER2.ASM < prev    next >
Assembly Source File  |  1993-05-05  |  3KB  |  85 lines

  1. ;*******************************;
  2. ; WASM Buffered File I/O, Input ;
  3. ; By Eric Tauck                 ;
  4. ;                               ;
  5. ; Defines:                      ;
  6. ;                               ;
  7. ;   GetByt  read a byte         ;
  8. ;   BufGet  read a buffer       ;
  9. ;                               ;
  10. ; Requires:                     ;
  11. ;                               ;
  12. ;   BUFFER1.ASM                 ;
  13. ;   FILE.ASM                    ;
  14. ;*******************************;
  15.  
  16.         jmps    _buffer2_end
  17.  
  18. ;========================================
  19. ; Read a byte from a buffer.
  20. ;
  21. ; In: BX= buffer record address.
  22. ;
  23. ; Out: AL= byte or DOS error code; CY=
  24. ;      set if error
  25.  
  26. GetByt  PROC    NEAR
  27.  
  28. ;--- read a byte from the buffer
  29.  
  30.         sub     WORD [bx + _BUFFER_BYTES], 1    ;decrement bytes in buffer
  31.         jc      _gtbyt1                         ;jump if zero
  32.  
  33.         inc     WORD [bx + _BUFFER_CURRENT]     ;increment pointer
  34.         push    bx
  35.         push    ds
  36.         lds     bx, [bx + _BUFFER_CURRENT]      ;load buffer location
  37.         mov     al, [bx - 1]                    ;load byte from buffer
  38.         pop     ds
  39.         pop     bx
  40.  
  41.         clc
  42.         ret
  43.  
  44. ;--- buffer must be filled first
  45.  
  46. _gtbyt1 call    BufGet          ;read buffer
  47.         jnc     GetByt          ;loop back if no error
  48.         ret
  49.         ENDP
  50.  
  51. ;========================================
  52. ; Read as many bytes as possible into
  53. ; buffer.
  54. ;
  55. ; In: BX= buffer record address.
  56. ;
  57. ; Out: AL= DOS error code; CY= set if
  58. ;      error.
  59.  
  60. BufGet  PROC    NEAR
  61.         push    bx
  62.         mov     dx, [bx + _BUFFER_CURRENT + 2]  ;segment of buffer
  63.         mov     ax, [bx + _BUFFER_BASE]         ;buffer base
  64.         mov     [bx + _BUFFER_CURRENT], ax      ;reset pointer
  65.         mov     cx, [bx + _BUFFER_SIZE]         ;size of buffer
  66.         mov     bx, [bx + _BUFFER_HANDLE]       ;file handle
  67.         call    FilRea                          ;read from file
  68.         pop     bx
  69.         jnc     _bfget1                         ;jump if no error
  70.         or      al, al                          ;check if really error
  71.         jnz     _bfget2                         ;jump if really error
  72.         or      cx, cx                          ;check if any bytes read
  73.         jz      _bfget2
  74.  
  75. _bfget1 mov     [bx + _BUFFER_BYTES], cx        ;save bytes read
  76.         clc
  77.         ret
  78.  
  79. _bfget2 mov     WORD [bx + _BUFFER_BYTES], 0    ;zero bytes in buffer
  80.         stc
  81.         ret
  82.         ENDP
  83.  
  84. _buffer2_end
  85.